home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / program / progem.lzh / gemcl7.c < prev    next >
Text File  |  1986-07-16  |  4KB  |  147 lines

  1. >>>>>>>>>>>>>>>>>>>>>> Download file for GEM column #7 <<<<<<<<<<<<<<<<<<<<<
  2. >>>>>>>>>>>>>>>>>>>>>>>>>>>> Sample Menu Tree <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  3.  
  4. -1, 1, 6, G_IBOX, NONE, NORMAL, 0x0L, 0,0, 80,25,    /* ROOT */
  5. 6, 2, 2, G_BOX, NONE, NORMAL, 0x1100L, 0,0, 80,513,    /* THE BAR */
  6. 1, 3, 5, G_IBOX, NONE, NORMAL, 0x0L, 2,0, 20,769,    /* THE ACTIVE */
  7. 4, -1, -1, G_TITLE, NONE, NORMAL, 0x0L, 0,0, 6,769,    /* Title #1 */
  8. 5, -1, -1, G_TITLE, NONE, NORMAL, 0x1L, 6,0, 6,769,    /* Title #2 */
  9. 2, -1, -1, G_TITLE, NONE, NORMAL, 0x2L, 12,0, 8,769,    /* Title #3 */
  10. 0, 7, 22, G_IBOX, NONE, NORMAL, 0x0L, 0,769, 80,19,    /* THE SCREEN */
  11. 16, 8, 15, G_BOX, NONE, NORMAL, 0xFF1100L, 2,0, 20,8,    /* Drop-down #1 */
  12. 9, -1, -1, G_STRING, NONE, NORMAL, 0x3L, 0,0, 19,1,    /* About... entry */
  13. 10, -1, -1, G_STRING, NONE, DISABLED, 0x4L, 0,1, 20,1,
  14. 11, -1, -1, G_STRING, NONE, NORMAL, 0x5L, 0,2, 20,1,    /* Desk acc entries */
  15. 12, -1, -1, G_STRING, NONE, NORMAL, 0x6L, 0,3, 20,1,
  16. 13, -1, -1, G_STRING, NONE, NORMAL, 0x7L, 0,4, 20,1,
  17. 14, -1, -1, G_STRING, NONE, NORMAL, 0x8L, 0,5, 20,1,
  18. 15, -1, -1, G_STRING, NONE, NORMAL, 0x9L, 0,6, 20,1,
  19. 7, -1, -1, G_STRING, NONE, NORMAL, 0xAL, 0,7, 20,1,
  20. 22, 17, 21, G_BOX, NONE, NORMAL, 0xFF1100L, 8,0, 13,5,    /* Drop-down #2 */
  21. 18, -1, -1, G_STRING, NONE, NORMAL, 0xBL, 0,0, 13,1,
  22. 19, -1, -1, G_STRING, NONE, DISABLED, 0xCL, 0,1, 13,1,
  23. 20, -1, -1, G_STRING, NONE, NORMAL, 0xDL, 0,4, 13,1,
  24. 21, -1, -1, G_STRING, NONE, NORMAL, 0xEL, 0,2, 13,1,
  25. 16, -1, -1, G_STRING, NONE, DISABLED, 0xFL, 0,3, 13,1,
  26. 6, 23, 25, G_BOX, NONE, NORMAL, 0xFF1100L, 14,0, 26,3,    /* Drop down #3 */
  27. 24, -1, -1, G_STRING, NONE, NORMAL, 0x10L, 0,2, 26,1,
  28. 25, -1, -1, G_STRING, NONE, NORMAL, 0x11L, 0,0, 26,1,
  29. 22, -1, -1, G_STRING, LASTOB, DISABLED, 0x12L, 0,1, 26,1
  30.  
  31. >>>>>>>>>>>>>>>>>>>>>>>> Menu enable/disable utility <<<<<<<<<<<<<<<<<<<<<<
  32.  
  33. /*------------------------------*/
  34. /*    undo_obj        */
  35. /*------------------------------*/
  36.     VOID
  37. undo_obj(tree, which, bit)
  38.     LONG    tree;
  39.     WORD    which;
  40.     UWORD    bit;
  41.     {
  42.     WORD    state;
  43.  
  44.     state = LWGET(OB_STATE(which));
  45.     LWSET(OB_STATE(which), state & ~bit);
  46.     }
  47.  
  48. /*------------------------------*/
  49. /*    enab_obj        */
  50. /*------------------------------*/
  51.     WORD
  52. enab_obj(tree, which)
  53.     LONG    tree;
  54.     WORD    which;
  55.     {
  56.     undo_obj(tree, which, (UWORD) DISABLED);
  57.     return (TRUE);
  58.     }
  59.  
  60. /*------------------------------*/
  61. /*    do_obj          */
  62. /*------------------------------*/
  63.     VOID
  64. do_obj(tree, which, bit)
  65.     LONG    tree;
  66.     WORD    which;
  67.     UWORD    bit;
  68.     {
  69.     WORD    state;
  70.  
  71.     state = LWGET(OB_STATE(which));
  72.     LWSET(OB_STATE(which), state | bit);
  73.     }
  74.  
  75. /*------------------------------*/
  76. /*    disab_obj        */
  77. /*------------------------------*/
  78.     WORD
  79. disab_obj(tree, which)
  80.     LONG    tree;
  81.     WORD    which;
  82.     {
  83.     do_obj(tree, which, (UWORD) DISABLED);
  84.     return (TRUE);
  85.     }
  86.  
  87. /*------------------------------*/
  88. /*    set_menu        */
  89. /*------------------------------*/
  90.     VOID
  91. set_menu(tree, change)            /* change[0] TRUE selects all entries*/
  92.     LONG    tree;            /* FALSE deselects all.  Change list */
  93.     WORD    *change;        /* of items is then toggled.         */
  94.     {
  95.     WORD    dflt, screen, drop, obj;
  96.  
  97.     dflt = *change++;            /* What is default?   */
  98.     screen = LWGET(OB_TAIL(ROOT));        /* Get SCREEN           */
  99.     drop = LWGET(OB_HEAD(screen));        /* Get DESK drop-down */
  100.                         /* and skip it        */
  101.     for (; (drop = LWGET(OB_NEXT(drop))) != screen; )
  102.         {
  103.         obj = LWGET(OB_HEAD(drop));
  104.         if (obj != NIL)
  105.         if (dflt)
  106.             map_tree(tree, obj, drop, enab_obj);
  107.         else
  108.             map_tree(tree, obj, drop, disab_obj);
  109.         }
  110.  
  111.     for (; *change; change++)
  112.         if (dflt)
  113.             disab_obj(tree, *change);
  114.         else
  115.             enab_obj(tree, *change);
  116.     }
  117.  
  118. >>>>>>>>>>>>>>>>>>>>> Definitions used in this article <<<<<<<<<<<<<<<<<<<<<<
  119.  
  120. #define ROOT 0
  121.  
  122. #define G_IBOX    25
  123. #define G_STRING  28
  124. #define G_TITLE   32
  125.  
  126. #define R_TREE     0
  127.  
  128. #define MN_SELECTED 10
  129.  
  130. #define CHECKED   0x4
  131. #define DISABLED  0x8
  132.  
  133. #define OB_NEXT(x) (tree + (x) * sizeof(OBJECT) + 0)
  134. #define OB_HEAD(x) (tree + (x) * sizeof(OBJECT) + 2)
  135. #define OB_TAIL(x) (tree + (x) * sizeof(OBJECT) + 4)
  136. #define OB_TYPE(x) (tree + (x) * sizeof(OBJECT) + 6)
  137. #define OB_FLAGS(x) (tree + (x) * sizeof(OBJECT) + 8)
  138. #define OB_STATE(x) (tree + (x) * sizeof(OBJECT) + 10)
  139. #define OB_SPEC(x) (tree + (x) * sizeof(OBJECT) + 12)
  140. #define OB_X(x) (tree + (x) * sizeof(OBJECT) + 16)
  141. #define OB_Y(x) (tree + (x) * sizeof(OBJECT) + 18)
  142. #define OB_WIDTH(x) (tree + (x) * sizeof(OBJECT) + 20)
  143. #define OB_HEIGHT(x) (tree + (x) * sizeof(OBJECT) + 22)
  144.  
  145. #define M_OFF     256
  146. #define M_ON      257